// chat/chat.js
const db = wx.cloud.database()
const _ = db.command // 引入数据库命令
// 假设的格式化时间戳函数
function formatTimestamp(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
} 

Page({
  data: {
    messages: [],
    chatitem: [],
    inputText: '',
    username: '',
    userId: '',
    productId: '',
    wechatID: '',
    content:'',
    historyMessages: [] // 用于存储历史消息的数据对象
  },

 
 
  loadHistoryMessages: function(start = 0, limit = 10) {
    const that=this;
    const db = wx.cloud.database();
    console.log('data',this.data);
    console.log('userid',getApp().globalData.userInfo);
    db.collection('messages') // 假设历史消息存储在名为'messages'的集合中
    .where({
      productId: this.data.productId, // 替换为你要匹配的productid值
      userId: getApp().globalData.userInfo,      // 替换为你要匹配的userid值
    })
      .get()
      .then(res => {
        const messages = res.data;
        that.setData({
          historyMessages:messages // 将新加载的消息添加到历史消息数组中
        });
        
      })
      .catch(err => {
        console.error('加载历史消息失败', err);
        // 可以给用户一个错误提示
      });
  },
  onLoad(options) {
    const { username, userId, productId } = options;
    this.setData({
      username,
      userId,
      productId,
    });
    // 加载聊天记录
    this.loadHistoryMessages(); // 页面加载时调用加载历史消息的函数
  
  },


  onInputChange(event) {
    this.setData({
      inputText: event.detail.value,
    });
  },
  // 保存新消息到云数据库
  saveNewMessageToCloudDB(newMessage) {
    const messagesCollection = db.collection('messages');
    this.setData({
      historyMessages:[...this.data.historyMessages,newMessage]
    });  
    return messagesCollection.add({
      data: newMessage,
    }).then(() => {
      console.log('新消息已保存到云数据库');
    }).catch(error => {
      console.error('保存新消息到云数据库失败:', error);
      // 错误处理逻辑
    });
    
  },
  saveNewChatToCloudDB(newchatitem) {
    const chatitem = db.collection('chat');
    return chatitem.add({
      data: newchatitem,
    }).then(() => {
      console.log('新聊天已保存到云数据库');
    }).catch(error => {
      console.error('保存新聊天到云数据库失败:', error);
      // 错误处理逻辑
    });
    
  },
  createNewMessage(inputText) {
    const { username, userId, productId } = this.data;
    const currentTimestamp = formatTimestamp(new Date());

    return {
      text: inputText,
      isMine: true,
      avatarUrl: `/images/pig.png`, // 假设有10个头像
      date: currentTimestamp,
      productId,
      username,
      userId:getApp().globalData.userInfo
    };
  },
  createNewchatitem(inputText) {
    const {userId, productId } = this.data;
    const currentTimestamp = formatTimestamp(new Date());
    return {
      content: inputText,
      isMine: true,
      avatarUrl: `/images/pig.png`, // 假设有10个头像
      date: currentTimestamp,
      productId,
      userId:getApp().globalData.userInfo
    };
  },

  async sendMessage() {
    const { inputText } = this.data;

    if (!inputText.trim()) {
      wx.showToast({
        title: '消息不能为空',
        icon: 'none',
        duration: 2000,
      });
      return;
    }
    const newMessage = this.createNewMessage(inputText);
    
    try {
      await this.saveNewMessageToCloudDB(newMessage);
      // 更新页面上的消息数组（这里简单地将新消息添加到数组末尾）
      const messages = [...this.data.messages, newMessage];
      console.log('pid',newMessage.productId);
      console.log('usif',getApp().globalData.userInfo);
      db.collection('chat') // 替换为你的集合名称
  .where({
    productId: newMessage.productId, // 替换为你要匹配的productid值
    userId: getApp().globalData.userInfo,      // 替换为你要匹配的userid值
  })
  .get()
  .then(res => {
    if (res.data.length > 0) {
      const chatDocId = res.data[0]._id;
      db.collection('chat')
        .doc(chatDocId)
        .update({
          data: { // 注意这里是data字段，不是res
            content: inputText, // 确保inputText在此上下文中是可用的
          },
        })
        .then(() => {
          console.log('新消息已保存到消息列表');
        })
        .catch(error => {
          console.error('保存新消息到消息列表失败:', error);
          // 错误处理逻辑
        });
    } else {
      console.log('没有找到匹配的聊天记录');
      const newchatitem = this.createNewchatitem(inputText);
      console.log('newchat',newchatitem);
      try
      { // 处理没有找到匹配记录的情况
         this.saveNewChatToCloudDB(newchatitem);
      }
      catch(error) 
      {
          console.error('创建聊天失败:', error);
          // 错误处理逻辑，比如重试发送或显示更详细的错误信息
      } 
    }
  })
  .catch(err => {
    console.error('查询失败:', err);
    // 错误处理逻辑
  });
  this.setData({ messages, inputText: '' });
  wx.showToast({
    title: '消息已发送',
    icon: 'success',
    duration: 2000,
  });

    } catch (error) {
      console.error('发送消息失败:', error);
      wx.showToast({
        title: '发送失败',
        icon: 'none',
        duration: 2000,
      });
      // 错误处理逻辑，比如重试发送或显示更详细的错误信息
    }
  },

});

